package leetcode4;
import java.util.*;
public class Day3 {



    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] input = scanner.nextLine().split(" ");
        int M = Integer.parseInt(input[0]); // 行数
        int N = Integer.parseInt(input[1]); // 列数
        scanner.close();

        char[][] matrix = new char[M][N];

        // 定义边界
        int top = 0;          // 上边界
        int bottom = M - 1;   // 下边界
        int left = 0;         // 左边界
        int right = N - 1;    // 右边界

        char currentChar = 'A'; // 起始字符

        // 当还有位置未填充时继续
        while (top <= bottom && left <= right) {
            // 从左到右填充上边界
            for (int col = left; col <= right; col++) {
                matrix[top][col] = currentChar;
                currentChar = nextChar(currentChar);
            }
            top++; // 上边界下移

            // 从上到下填充右边界
            for (int row = top; row <= bottom; row++) {
                matrix[row][right] = currentChar;
                currentChar = nextChar(currentChar);
            }
            right--; // 右边界左移

            // 如果还有行需要填充（避免单行情况重复填充）
            if (top <= bottom) {
                // 从右到左填充下边界
                for (int col = right; col >= left; col--) {
                    matrix[bottom][col] = currentChar;
                    currentChar = nextChar(currentChar);
                }
                bottom--; // 下边界上移
            }

            // 如果还有列需要填充（避免单列情况重复填充）
            if (left <= right) {
                // 从下到上填充左边界
                for (int row = bottom; row >= top; row--) {
                    matrix[row][left] = currentChar;
                    currentChar = nextChar(currentChar);
                }
                left++; // 左边界右移
            }
        }

        // 输出矩阵
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(matrix[i][j]);
                if (j < N - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

    // 获取下一个字符，Z之后循环到A
    private static char nextChar(char c) {
        if (c == 'Z') {
            return 'A';
        } else {
            return (char) (c + 1);
        }
    }
}
